package com.yuwenchao.superafflatus;

import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.*;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.lang.Console;
import cn.hutool.core.swing.clipboard.ClipboardUtil;
import cn.hutool.core.util.*;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.util.ClassUtils;

import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.Date;

import static cn.hutool.core.util.NumberUtil.round;
import static cn.hutool.core.util.NumberUtil.roundStr;

@SpringBootTest
public class HuToolsDemo {

    @Value("${linuxFile.downloadFile}")
    String test;

    @DisplayName("测试类注解标记")
    @Test
    public void dateFunction(){

        System.out.println(test);


    }


    /*
    不支持参数，对象打印需要拼接字符串
    不能直接打印数组，需要手动调用Arrays.toString
     */
    @Test
    public void ConsoleFunction(){

        //类似 System.out.println("哈哈");
        //Console.log("哈哈");
        Console.log("This is Console log for {}.", "test");
        //控制台输出：This is Console log for test.
        String name ="王小二";
        Console.log("恭喜{}测试成功！",name);


        String[] a = {"abc", "bcd", "def"};
        Console.log(a);//控制台输出：[abc, bcd, def]
    }



    /**
     * 身份证测试
     */
    @Test
    public void Demo001() {



        String ID_18 = "321083197812162119";
        String ID_15 = "150102880730303";

        //是否有效
        boolean valid = IdcardUtil.isValidCard(ID_18);
        boolean valid15 = IdcardUtil.isValidCard(ID_15);

        //转换
        String convert15To18 = IdcardUtil.convert15To18(ID_15);

        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        String date1 =df.format(new Date());
        //年龄
        DateTime date = DateUtil.parse(date1);

       /* SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");//设置日期格式
        String  date1 =df.format(new Date());
        System.out.println(df.format(new Date()));// new Date()为获取当前系统时间*/

        int age = IdcardUtil.getAgeByIdCard(ID_18, date);


        int age2 = IdcardUtil.getAgeByIdCard(ID_15, date);


        //生日
        String birth = IdcardUtil.getBirthByIdCard(ID_18);


        String birth2 = IdcardUtil.getBirthByIdCard(ID_15);


        //省份
        String province = IdcardUtil.getProvinceByIdCard(ID_18);


        String province2 = IdcardUtil.getProvinceByIdCard(ID_15);

        System.out.println("身份证是否有效," + "ID_18:" + valid + "，ID_15" + valid15);
        System.out.println("获取年龄：18位：" + age + "，15位：" + age2);
        System.out.println("获取生日：18位：" + birth + "，15位：" + birth2);
        System.out.println("获取省份：18位：" + province + "，15位：" + province2);
        System.out.println("15位身份证转18位：" + convert15To18);


    }

    /**
     * 大小写转换
     */
    @Test
    public void Demo002() {
        //注意 转换为大写只能精确到分（小数点儿后两位），之后的数字会被忽略。
        double a = 67556.32;
        String digitUppercase = Convert.digitToChinese(a);
        System.out.println("转换后的金额;" + digitUppercase);

    }


    /**
     * 时间日期测试
     */
    @Test
    public void Demo003() {
        //昨天
        System.out.println("昨天:" + DateUtil.yesterday());
        //明天
        System.out.println("明天:" + DateUtil.tomorrow());
        //上周
        System.out.println("上周:" + DateUtil.lastWeek());
        //下周
        System.out.println("下周:" + DateUtil.nextWeek());
        //上个月
        System.out.println("上个月:" + DateUtil.lastMonth());
        //下个月
        System.out.println("下个月:" + DateUtil.nextMonth());
    }


    /**
     * 计数器测试
     */
    @Test
    public void Demo004() {
        TimeInterval timer = DateUtil.timer();

//---------------------------------
//-------这是执行过程
//---------------------------------
        for (int i = 0; i < 1000; i++) {
            System.out.println(i + 1);
        }

        long interval = timer.interval();//花费毫秒数
        timer.intervalRestart();//返回花费时间，并重置开始时间
        timer.intervalMinute();//花费分钟数
        System.out.println("耗时：" + interval);
    }


    /**
     * 星座和属相
     */
    @Test
    public void Demo005() {

        String zodiac = DateUtil.getZodiac(Month.NOVEMBER.getValue(), 17);
        System.out.println("星座:" + zodiac);

        String chineseZodiac = DateUtil.getChineseZodiac(1990);
        System.out.println("属相:" + chineseZodiac);

        //年龄
        int age = DateUtil.ageOfNow("1990-11-17");
        System.out.println("获取年龄：" + age);
    }


    /**
     * LocalDateTime工具
     */
    @Test
    public void Demo006() {
        String dateStr = "2020-01-23T12:23:56";
        DateTime dt = DateUtil.parse("dateStr");

        System.out.println("111"+dt);

// Date对象转换为LocalDateTime
        LocalDateTime of = LocalDateTimeUtil.of(dt);

// 时间戳转换为LocalDateTime
        of = LocalDateTimeUtil.ofUTC(dt.getTime());

        System.out.println(of);
    }

    /**
     * format方法
     */
    @Test
    public void Demo007() {
        String template = "{}爱{}，就像老鼠爱{}大米";
        String str = StrUtil.format(template, "牛郎", "织女", "hahaha"); //str -> 我爱你，就像老鼠爱大米
        System.out.println("str:" + str);
    }




    /**
     * 剪切板
     */
    @Test
    public void Demo008() {
        //Clipboard clipboard = ClipboardUtil.getClipboard();
        ClipboardUtil.setStr("abcdef");  //相当于ctrl+c
        String str = ClipboardUtil.getStr();//相当于ctrl+V
        Console.log(str);
    }


    /**
     * 命令行
     */
    @Test
    public void Demo009() {
        // String str = RuntimeUtil.execForStr("ipconfig");
        // System.out.println("获取到的信息："+str);
        //打开计算器
        RuntimeUtil.exec("calc");
        //打开画图
        RuntimeUtil.exec("mspaint");

        //write 写字板
        //notepad 打开记事本
    }

    /*
    数字工具-NumberUtil
     */
    @Test
    public void Demo010() {

        //BigDecimal四舍五入 保留2位小数
        double abc = 123.456;
        //BigDecimal round = round("1234.1", 2);
        BigDecimal round1 = round(abc, 2);
        System.out.println(round1);
        //STR 保留2位小数
        String str = roundStr("1234.56", 1);
        System.out.println(str);
        //是否为数字
        boolean number = NumberUtil.isNumber("5");
        System.out.println(number);
        //是否为整数
        boolean integer = NumberUtil.isInteger("78.9");
        System.out.println(integer);
        //是否为浮点数
        boolean aDouble = NumberUtil.isDouble("0.01");
        System.out.println(aDouble);
        // 是否为质数
        boolean primes = NumberUtil.isPrimes(1117);
        System.out.println(primes);
    }


    /*
   数字工具-NumberUtil  随机数组
   生成不重复随机数 根据给定的最小数字和最大数字，以及随机数的个数，产生指定的不重复的数组。
    */
    @Test
    public void Demo011() {
        int[] ints = NumberUtil.generateRandomNumber(0, 8888, 4);
        for (int anInt : ints) {
            System.out.println(anInt);
        }

    }


    /**
     * 随机数
     */
    @Test
    public void Demo012() {
        //获得指定范围内的随机数
        //int i = RandomUtil.randomInt(0,100);
        //System.out.println(i);

      /*  ArrayList<String> strings = new ArrayList<>();
        strings.add("abc");
        strings.add("bcd");
        strings.add("def");
        strings.add("fgh");
        //随机获得列表中的元素
       String s = RandomUtil.randomEle(strings, 4);
        System.out.println(s);*/

        //获得一个随机的字符串（只包含数字和字符）
        String s = RandomUtil.randomString(4);
        System.out.println(s);

    }

    /*
    UUID   //效率更高
     */

    @Test
    public void Demo013() {
        //生成的是不带-的字符串，类似于：b17f24ff026d40949c85a24f4f375d42
        String simpleUUID = IdUtil.simpleUUID().substring(0, 10);
        System.out.println(simpleUUID);

    }



       /*
       断言
        isTrue 是否True
        isNull 是否是null值，不为null抛出异常
        notNull 是否非null值
        notEmpty 是否非空
        notBlank 是否非空白符
        notContain 是否为子串
        notEmpty 是否非空
        noNullElements 数组中是否包含null元素
        isInstanceOf 是否类实例
        isAssignable 是子类和父类关系
        state 会抛出IllegalStateException异常

     */

    @Test
    public void Demo014() {
        String a = null;
        //正确不显示，错误抛异常
        Assert.isNull(a);


    }

    /**
     * NetUtil
     */
    @Test
    public void Demo015() {
       /* long l = NetUtil.ipv4ToLong("172.20.10.2");
        System.out.println(l);

        //2130706433
        String s = NetUtil.longToIpv4(2886994434L);
        System.out.println(s);*/

        String filePath = ClassUtils.getDefaultClassLoader().getResource("static/filemodel/YearSalary.jasper").getPath();
        System.out.println("路径："+filePath);
    }






}
